home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / os2 / adaptor.zip / ADAPT.ZIP / adaptor / src / labels.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  3KB  |  98 lines

  1. /*************************************************************************
  2. *                                                                        *
  3. *  Name : labels.c                                                       *
  4. *                                                                        *
  5. *  Purpose : Data Structures for Label Tables                            *
  6. *                                                                        *
  7. *  Author : Dr. Thomas Brandes, GMD, Z1.HR                               *
  8. *                                                                        *
  9. *  Date   : 15. 4. 1993                                                  *
  10. *                                                                        *
  11. *************************************************************************/
  12.  
  13. #include "labels.h"
  14. #include "Scanner.h"  /* MakeEndDos */
  15.  
  16. int LabelCounter;
  17.  
  18. typedef struct
  19.  { int name, used, defined, inDos ;
  20.  } label_info;
  21.  
  22. label_info Labels [MAX_LABELS];
  23.  
  24. void InitLabels ()
  25. { LabelCounter = 0;
  26. }
  27.  
  28. int SearchLabel (label)
  29. int label;
  30. {  int found, i;
  31.    i = 0;
  32.    found = 0;
  33.    while ((i < LabelCounter) && (found == 0))
  34.      { if (Labels[i].name == label)
  35.           found = 1;
  36.         else
  37.           i++;
  38.      }
  39.    /* printf ("Search: Position of Label %d is %d\\n",label,i); */
  40.    return (i);
  41. }
  42.  
  43. void NewLabel (name, used, defined, inDos)
  44. int name, used, defined, inDos;
  45.  
  46. { if (LabelCounter == MAX_LABELS)
  47.     { printf ("Maximal number of labels (%d) reached\n", MAX_LABELS);
  48.       printf ("Internal Error\n");
  49.       exit (-1);
  50.     }
  51.   Labels[LabelCounter].name = name;
  52.   Labels[LabelCounter].used = used;
  53.   Labels[LabelCounter].defined = defined;
  54.   Labels[LabelCounter].inDos = inDos;
  55.   LabelCounter += 1;
  56. }
  57.  
  58. void LabelDo (label)
  59. int label;
  60. {  int pos;
  61.    /* printf ("%d will be a Do Label \\n", label); */
  62.    pos = SearchLabel (label);
  63.    if (pos == LabelCounter) /* not found, define */
  64.      NewLabel (label, 1, 0, 1);
  65.     else
  66.      { Labels[pos].used = 1;
  67.        Labels[pos].inDos += 1;  }
  68. }
  69.  
  70. int LabelDefine (label)
  71. int label;
  72. { int pos;
  73.   pos = SearchLabel (label);
  74.   /* printf ("Label %d will be defined \\n", label); */
  75.   if (pos < LabelCounter)  /* found */
  76.    { if (Labels[pos].defined > 0)
  77.        printf ("Label %d defined twice\\n", label);
  78.      MakeEndDos = Labels[pos].inDos;
  79.      /* printf ("%d EndDos inserted\\n", MakeEndDos); */
  80.    }
  81.    else
  82.      NewLabel (label, 0, 1, 0);
  83.   return (pos+1);
  84. }
  85.            
  86. int LabelUse (label)
  87. int label;
  88. {  int pos;
  89.    pos = SearchLabel (label);
  90.    /* printf ("Label %d is used\\n", label); */
  91.    if (pos < LabelCounter)  /* found */
  92.     { Labels[pos].used = 1;
  93.     }
  94.     else
  95.       NewLabel (label, 1, 0, 0);
  96.   return (pos+1);
  97. } /* LabelUse */
  98.